/******************************************************************************* * * Copyright (c) 2010-2011 Sonatype, Inc. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * * * *******************************************************************************/ package org.hudsonci.maven.plugin.dependencymonitor; import com.thoughtworks.xstream.annotations.XStreamAlias; import hudson.matrix.MatrixProject; import hudson.model.AbstractProject; import hudson.model.Descriptor; import hudson.model.Item; import hudson.model.Project; import hudson.triggers.Trigger; import hudson.triggers.TriggerDescriptor; import org.kohsuke.stapler.DataBoundConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.enterprise.inject.Typed; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import static com.google.common.base.Preconditions.checkNotNull; /** * Subscribe to {@link DependencyMonitor} dependency updates. Projects that subscribe are artifact consumers. * * @author <a href="mailto:jason@planet57.com">Jason Dillon</a> * @since 2.1.0 */ @XStreamAlias("maven-dependency-trigger") public class DependencyTrigger extends Trigger<AbstractProject> { private static final Logger log = LoggerFactory.getLogger(DependencyTrigger.class); @DataBoundConstructor public DependencyTrigger() { // empty } @Override public DescriptorImpl getDescriptor() { return (DescriptorImpl) super.getDescriptor(); } public AbstractProject getProject() { return job; } @Override public void start(final AbstractProject project, final boolean newInstance) { super.start(project, newInstance); getDescriptor().dependencyMonitor.subscribe(getProject()); } @Override public void stop() { getDescriptor().dependencyMonitor.unsubscribe(getProject()); } @Named @Singleton @Typed(Descriptor.class) public static class DescriptorImpl extends TriggerDescriptor { private final DependencyMonitor dependencyMonitor; @Inject public DescriptorImpl(final DependencyMonitor dependencyMonitor) { this.dependencyMonitor = checkNotNull(dependencyMonitor); } @Override public boolean isApplicable(final Item item) { return item instanceof Project || item instanceof MatrixProject; } @Override public String getDisplayName() { // TODO: i18n return "Build when Maven dependencies have been updated by Maven " + "3 integration"; } } }